<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>10.在类中使用访问器</title>
</head>

<body>

</body>
<script>
  /*
  使用访问器可以对对象的属性进行访问控制，下面是使用访问器对私有属性进行管理。

    语法介绍

    - 使用访问器可以管控属性，有效的防止属性随意修改
    - 访问器就是在函数前加上 get/set修饰，操作属性时不需要加函数的扩号，直接用函数名
*/
  // 访问器设置和修改属性都会经过方法
  class Request {
    // 方法1 ，2     constructor(url) {
    constructor(host) {
      // 方法1 ：变量名和 set 的 方法名一样会导致循环调用,可以把 host变量名称改为 _host
      // this._host = url;
      // 方法2 ：也可以放入一个对象当中
      // this.data = { url };
      // 方法3：也可以直接写 
      this.data = {};

      this.host = host;// 这样会走入host方法中
    }
    set host (url) {
      if (!/^https?:\/\//i.test(url)) {
        throw new Error("地址错误");
      }
      // 方法1:this._host = url;
      // 方法2:this.data =url 
      // 方法3:this.data.host = url;
      this.data.host = url;
    }

    get host() {
      return this.data["host"];
    }
  }
  let hd = new Request("https://www.houdunren.com");
  hd.host = 'https://com.hdcms.com'
  console.log(hd.host);

</script>

</html>